﻿// ===================================
// <copyright>LogoUI Co.</copyright>
// <author>Vlad Spivak</author>
// <email>mailto:vlads@logoui.co.il</email>
// <created>20/00/10</created>
// <lastedit>Saturday, November 20, 2010</lastedit>

// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the 'Software'), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
//
// <remarks>Part of this software based on various internet sources, mostly on the works
// of members of Wpf Disciples group http://wpfdisciples.wordpress.com/
// Also project may contain code from works of Nito and OpenLight group</remarks>
// ====================================================================================//


using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Data;

namespace LogoFX.Infra
{
  /// <summary>
  /// Converts <see cref="DateTime"/> to <see cref="double"/> according to supplied format
  /// </summary>
  public class TimeToDoubleConverter : IValueConverter
  {

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
      if (value is System.DateTime)
      {
        switch ((string)parameter)
        {
          case "Hours":
            return new TimeSpan(((DateTime)value).Ticks).TotalHours;
          case "Days":
            return new TimeSpan(((DateTime)value).Ticks).TotalDays;
          case "Minutes":
            return new TimeSpan(((DateTime)value).Ticks).TotalMinutes;
          case "Seconds":
            return new TimeSpan(((DateTime)value).Ticks).TotalSeconds;
          case "Milliseconds":
            return new TimeSpan(((DateTime)value).Ticks).TotalMilliseconds;
          case "Ticks":
          default:
            return (double)((DateTime)value).Ticks;
        }
      }
      return DependencyProperty.UnsetValue;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
      switch ((string)parameter)
      {
        case "Hours":
          return new DateTime(TimeSpan.FromHours((double)value).Ticks);
        case "Days":
          return new DateTime(TimeSpan.FromDays((double)value).Ticks);
        case "Minutes":
          return new DateTime(TimeSpan.FromMinutes((double)value).Ticks);
        case "Seconds":
          return new DateTime(TimeSpan.FromSeconds((double)value).Ticks);
        case "Milliseconds":
          return new DateTime(TimeSpan.FromMilliseconds((double)value).Ticks);
        case "Ticks":
        default:
          return new DateTime((long)(double)value);
      }
      
    }

  }
}
